VARI is a vegetation index computed only from visible bands (Red, Green, Blue). It is designed to be
more resistant to atmospheric effects and is ideal for RGB imagery from satellites, UAVs, and
conventional cameras where NIR is not available.
1. Scientific Definition
The Visible Atmospherically Resistant Index (VARI) is a vegetation index that uses
reflectance in the visible portion of the spectrum to estimate green vegetation. It enhances the
contribution of the green band and reduces atmospheric and illumination effects, making it suitable
for RGB imagery.
Formula
A commonly used formulation of VARI is:
VARI = (Green − Red) / (Green + Red − Blue)
Dimensionless (≈ –1 to +1)
Where:
Green: Green band reflectance
Red: Red band reflectance
Blue: Blue band reflectance
Typical Interpretation
VARI Range
Interpretation
< 0.0
Water, clouds, shadows, non-vegetated dark surfaces
0.0 – 0.1
Bare soil, built-up, or very sparse vegetation
0.1 – 0.3
Low to moderate green vegetation cover
> 0.3
Dense green vegetation (crops, grass, forests)
Key Applications
Vegetation mapping using RGB drone imagery
Crop monitoring when only visible bands are available
Quick assessment of greenness in high-resolution aerial or satellite images
Complementary to NDVI/OSAVI in low-cost camera systems
2. Data & Bands for VARI
Common Sensors & Bands
Sentinel-2 (ESA) – 10 m
Blue: B2 (~490 nm)
Green: B3 (~560 nm)
Red: B4 (~665 nm)
Landsat 8/9 OLI – 30 m
Blue: B2
Green: B3
Red: B4
UAV / RGB cameras
Use calibrated reflectance or radiance in R, G, B channels.
Good Practice
Prefer surface reflectance products and remove thick clouds/haze when possible.
For drones, apply radiometric calibration if available.
Clip VARI to your AOI before export to reduce file size.
Use consistent acquisition geometry when comparing different dates.
Palette Suggestion
A sample VARI color palette:
[ "#440154", "#3b528b", "#21908c", "#5dc963", "#fde725" ]
3. Google Earth Engine Code – VARI for Any AOI
Steps: open code.earthengine.google.com → New Script → paste the code →
draw your AOI as geometry on the map → click Run.
Then export VARI as GeoTIFF to Google Drive.
// VARI for any Area of Interest (AOI) using Sentinel-2 SR
// --------------------------------------------------------
// 1) Go to: https://code.earthengine.google.com
// 2) Click "New Script" and paste this code.
// 3) On the map: draw your AOI (Polygon/Rectangle).
// It will appear as a variable named 'geometry' in the left panel.
// 4) Click "Run" to display VARI.
// 5) In the Tasks tab, click "Run" to export VARI to Google Drive.
// --------------------------------------------------------
// 1. Define Area of Interest (AOI)
// --------------------------------------------------------
var roi = geometry; // Make sure a 'geometry' object exists in the left panel
// Center the map on the AOI
Map.centerObject(roi, 11);
// --------------------------------------------------------
// 2. Define time range
// --------------------------------------------------------
var startDate = '2023-01-01';
var endDate = '2023-12-31';
// --------------------------------------------------------
// 3. Load Sentinel-2 Surface Reflectance collection
// and keep only bands needed for VARI
// --------------------------------------------------------
var s2 = ee.ImageCollection('COPERNICUS/S2_SR')
.filterBounds(roi)
.filterDate(startDate, endDate)
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
.select(['B2', 'B3', 'B4']); // Blue, Green, Red
// Create a median composite and clip to AOI
var image = s2.median().clip(roi);
// --------------------------------------------------------
// 4. Compute VARI
// VARI = (Green - Red) / (Green + Red - Blue)
// --------------------------------------------------------
var vari = image.expression(
'(G - R) / (G + R - B)',
{
'G': image.select('B3'),
'R': image.select('B4'),
'B': image.select('B2')
}
).rename('VARI');
// --------------------------------------------------------
// 5. Visualization on the map
// --------------------------------------------------------
var variVis = {
min: -1,
max: 1,
palette: [
'#440154', // low
'#3b528b',
'#21908c',
'#5dc963',
'#fde725' // high
]
};
// Add VARI layer to the map
Map.addLayer(vari, variVis, 'VARI (Sentinel-2)', true);
// Optionally, also show a true color composite for context
var s2_rgb = ee.ImageCollection('COPERNICUS/S2_SR')
.filterBounds(roi)
.filterDate(startDate, endDate)
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
.select(['B4','B3','B2']) // RGB
.median()
.clip(roi);
Map.addLayer(s2_rgb, {min:0, max:3000}, 'True Color (RGB)', false);
// --------------------------------------------------------
// 6. Export VARI as GeoTIFF to Google Drive
// --------------------------------------------------------
Export.image.toDrive({
image: vari,
description: 'VARI_Export',
fileNamePrefix: 'VARI_Export',
region: roi,
scale: 10, // Sentinel-2 resolution
crs: 'EPSG:4326',
maxPixels: 1e13
});
// End of script